package com.zzyl.common.utils.ai;

import com.baidubce.qianfan.Qianfan;
import com.baidubce.qianfan.core.auth.Auth;
import com.baidubce.qianfan.model.chat.ChatResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
@Slf4j
public class BaiduQianfanAIModelUtil {

    @Autowired
    private BaiduProperties baiduProperties;

    /**
     * 调用大模型，获取AI结果
     * @param prompt 提示词
     * @return
     */
    public String invoke(String prompt) {
        log.warn("==================开始调用百度千帆大模型进行体检报告分析===================");
        /**
         * 第一个参数：认证类型，固定选择 Auth.TYPE_OAUTH
         * 第二个参数：accessKeyId，从百度云控制台创建的应用里可以找到
         * 第三个参数：accessKeySecret，从百度云控制台创建的应用里可以找到
         */
        Qianfan qianfan = new Qianfan(baiduProperties.getAccessKey(), baiduProperties.getSecretKey());
        ChatResponse response = qianfan.chatCompletion()
                .model(baiduProperties.getQianfanModel()) // 模型名称，要选择自己开通付费的模型
                .addMessage("user", prompt) // 聊天内容，可以设置多个，每个消息包含role（角色，user表示用户，assistant表示模型），content（消息内容）
                .temperature(0.8) // 采样参数，取值范围(0,1]
                .maxOutputTokens(2000) // 模型输出最大长度，取值范围[2, 2048]
                .responseFormat("json_object")  // 模型输出格式，取值范围：text（文本）、json_object（JSON对象）
                .execute();
        log.info("AI分析结果json：{}",response.getResult());
        log.warn("==================调用百度千帆大模型进行体检报告分析结束===================");
        String result = response.getResult();
        return result;
    }

}